package com.mmy.dao.plane;

import java.util.Date;
import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.mmy.domain.plane.VPlanePlan;

public interface VPlanePlanRepository extends JpaRepository<VPlanePlan, Integer> {

	/*
	 * 根据name查找
	 */
	@Query(value = "select *  from vPlanePlan where cPlaneName like %:strPlaneName%", nativeQuery = true)
	List<VPlanePlan> findByName(@Param("strPlaneName") String strPlaneName);

	/**
	 * 函数功能说明：前台 新建飞机票预留 查询 该机票时刻表
	 *
	 * @param 参数说明
	 * @return 返回值说明 jsp页面
	 * @throws 异常处理说明
	 * @author 创建人 shangzl 修改人hanxl
	 * @date 创建日期 修改时间 2021.3.17
	 */
	@Query(value = "select *  from vPlanePlan where iPlanID = :iPlanID", nativeQuery = true)
	VPlanePlan findByPlanID(@Param("iPlanID") int iPlanID);

	/*
	 * 根据id查找
	 */
	@Query(value = "select *  from vPlanePlan where iPlanID = :iPlanID", nativeQuery = true)
	List<VPlanePlan> findByPlaneID(@Param("iPlanID") int iPlaneID);

	/**
	 * 函数功能说明： 跳转进入前台飞机机票页面 机票推荐模块 推荐由北京出发的机票信息 国内
	 *
	 *
	 *
	 * 出发时间大于现在时间至少一天
	 *
	 * 按照 到达地分组 价格最少的航班
	 * 
	 *
	 * @param 参数说明
	 * @return 返回值说明 jsp页面
	 * @throws 异常处理说明
	 * @author 创建人Hanxl
	 * @date 创建日期2021.02.24 修改时间2021.03.17
	 */
	@Query(value = "SELECT a.* FROM vPlanePlan a , ( SELECT iZoneInID, MIN( fPrice ) AS fMinPrice  FROM vPlanePlan "
			+ " WHERE DateDIFF(dStartDate,now()) between 1 and 90  GROUP BY iZoneInID ) b where a.iZoneInID = b.iZoneInID "
			+ "AND a.fPrice = b.fMinPrice and a.iZoneInID<900000 and  a.cZoneOutName like %?1% limit 10", nativeQuery = true)
	List<VPlanePlan> findByZoneOutName(String strZoneOutName);

	/**
	 * 函数功能说明： 跳转进入前台飞机机票页面 机票推荐模块 推荐由北京出发的机票信息 国外
	 * 
	 *
	 *
	 * 出发时间大于现在时间至少一天
	 *
	 * 按照 到达地分组 价格最少的航班
	 * 
	 *
	 * @param 参数说明
	 * @return 返回值说明 jsp页面
	 * @throws 异常处理说明
	 * @author 创建人Hanxl
	 * @date 创建日期2021.02.24 修改时间2021.03.17
	 */
	@Query(value = "SELECT a.* FROM vPlanePlan a , ( SELECT iZoneInID, MIN( fPrice ) AS fMinPrice  FROM vPlanePlan  "
			+ "WHERE DateDIFF(dStartDate,now()) between 1 and 90  GROUP BY iZoneInID ) b where a.iZoneInID = b.iZoneInID "
			+ "AND a.fPrice = b.fMinPrice and a.iZoneInID>900000 and  a.cZoneOutName like %?1%  limit 10", nativeQuery = true)
	List<VPlanePlan> findOutByZoneOutName(String strZoneOutName);

	/**
	 * 函数功能说明： 查询航班时刻 单程 往返一样
	 *
	 * @param 参数说明
	 * @return 返回值说明 jsp页面
	 * @throws 异常处理说明
	 * @author 创建人 shangzl 修改人hanxl
	 * @date 创建日期 修改时间 2021.03.17
	 */
	@Query(value = "select * from vPlanePlan where (:strOutCityName = \"\" or cZoneOutName like %:strOutCityName%) and (:strInCityName = \"\" or cZoneInName like %:strInCityName%) and DateDIFF(dStartDate,:outDate) between 0 and 1", nativeQuery = true)
	List<VPlanePlan> findSingle(@Param("strOutCityName") String strOutCityName,
			@Param("strInCityName") String strInCityName, @Param("outDate") Date outDate);

	/**
	 * 后台航班信息管理中显示自己公司的航班信息
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @param iPlaneID
	 * @date 创建日期 2020.11.19 修改时间 2021.03.17
	 */
	@Query(value = "select * from vPlanePlan where cSpare1=:iOrgID and iPlaneID=:iPlaneID ", nativeQuery = true)

	List<VPlanePlan> findByOrgID(@Param("iOrgID") int iOrgID, @Param("iPlaneID") int iPlaneID);

	/**
	 * 后台航班信息管理中超级管理员登录显示所有航班信息
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @param iPlaneID
	 * @date 创建日期 2020.11.19 修改时间 2021.03.17
	 */
	@Query(value = "select * from vPlanePlan where iPlaneID=:iPlaneID and (:strPlaneOutZone = \"\" or cZoneOutName like %:strPlaneOutZone%) "
			+ "and (:strPlaneInZone = \"\" or cZoneInName like %:strPlaneInZone%) and DateDIFF(dStartDate,:outDate) between 0 and 1  "
			+ "limit :startIndex,:count ", nativeQuery = true)
	List<VPlanePlan> findSearchALLDate(@Param("iPlaneID") int iPlaneID, @Param("outDate") Date outDate,
			@Param("strPlaneOutZone") String strPlaneOutZone, @Param("strPlaneInZone") String strPlaneInZone,
			@Param("startIndex") int startIndex, @Param("count") int count);

	/**
	 * 后台航班管理中显示自己公司的招标信息
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @date 创建日期 2020.11.19 修改时间 2021.02.22
	 */
	@Query(value = "select * from vPlanePlan where iPlaneID=:iPlaneID and (:strPlaneOutZone = \"\" or cZoneOutName like %:strPlaneOutZone%) "
			+ "and (:strPlaneInZone = \"\" or cZoneInName like %:strPlaneInZone%) and DateDIFF(dStartDate,:outDate) between 0 and 1  "
			+ "and cSpare1=:iOrgID limit :startIndex,:count", nativeQuery = true)

	List<VPlanePlan> findSearchByOrgIDDate(@Param("iPlaneID") int iPlaneID, @Param("iOrgID") int iOrgID,
			@Param("outDate") Date outDate, @Param("strPlaneOutZone") String strPlaneOutZone,
			@Param("strPlaneInZone") String strPlaneInZone, @Param("startIndex") int startIndex,
			@Param("count") int count);

	/**
	 * 后台航班信息管理中超级管理员登录显示所有公司的航班信息 获取分页
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @param iPlaneID
	 * @date 创建日期 2020.11.19 修改时间 2021.02.22
	 */
	@Query(value = "select count(*)  from vPlanePlan where iPlaneID=:iPlaneID and (:strPlaneOutZone = \"\" or cZoneOutName like %:strPlaneOutZone%) "
			+ "and (:strPlaneInZone = \"\" or cZoneInName like %:strPlaneInZone%) and DateDIFF(dStartDate,:outDate) between 0 and 1  ", nativeQuery = true)
	int countALLDate(@Param("iPlaneID") int iPlaneID, @Param("outDate") Date outDate,
			@Param("strPlaneOutZone") String strPlaneOutZone, @Param("strPlaneInZone") String strPlaneInZone);

	/**
	 * 后台航班管理中显示自己公司的航班信息 获取分页
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @param iOrgID2
	 * @date 创建日期 2020.11.19 修改时间 2021.02.22
	 */
	@Query(value = "select count(*)  from vPlanePlan where iPlaneID=:iPlaneID and (:strPlaneOutZone = \"\" or cZoneOutName like %:strPlaneOutZone%) "
			+ "and (:strPlaneInZone = \"\" or cZoneInName like %:strPlaneInZone%) and DateDIFF(dStartDate,:outDate) between 0 and 1  "
			+ "and cSpare1=:iOrgID", nativeQuery = true)
	int countByOrgIDDate(@Param("iPlaneID") int iPlaneID, @Param("iOrgID") int iOrgID, @Param("outDate") Date outDate,
			@Param("strPlaneOutZone") String strPlaneOutZone, @Param("strPlaneInZone") String strPlaneInZone);

	/**
	 * 后台航班信息管理中
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @date 创建日期 2020.11.19 修改时间 2021.03.17
	 */
	@Query(value = "select * from vPlanePlan where iPlaneID=?1 ", nativeQuery = true)
	List<VPlanePlan> findAll(int iPlaneID);

	/**
	 * 后台航班信息管理中超级管理员登录显示所有航班信息
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @param iPlaneID
	 * @date 创建日期 2020.11.19 修改时间 2021.03.17
	 */
	@Query(value = "select * from vPlanePlan where iPlaneID=:iPlaneID and (:strPlaneOutZone = \"\" or cZoneOutName like %:strPlaneOutZone%) "
			+ "and (:strPlaneInZone = \"\" or cZoneInName like %:strPlaneInZone%) "
			+ "limit :startIndex,:count ", nativeQuery = true)
	List<VPlanePlan> findSearchALL(@Param("iPlaneID") int iPlaneID, @Param("strPlaneOutZone") String strPlaneOutZone,
			@Param("strPlaneInZone") String strPlaneInZone, @Param("startIndex") int startIndex,
			@Param("count") int count);

	/**
	 * 后台航班管理中显示自己公司的招标信息
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @date 创建日期 2020.11.19 修改时间 2021.02.22
	 */
	@Query(value = "select * from vPlanePlan where iPlaneID=:iPlaneID and (:strPlaneOutZone = \"\" or cZoneOutName like %:strPlaneOutZone%) "
			+ "and (:strPlaneInZone = \"\" or cZoneInName like %:strPlaneInZone%)  "
			+ "and cSpare1=:iOrgID limit :startIndex,:count", nativeQuery = true)

	List<VPlanePlan> findSearchByOrgID(@Param("iPlaneID") int iPlaneID, @Param("iOrgID") int iOrgID,
			@Param("strPlaneOutZone") String strPlaneOutZone, @Param("strPlaneInZone") String strPlaneInZone,
			@Param("startIndex") int startIndex, @Param("count") int count);

	/**
	 * 后台航班信息管理中超级管理员登录显示所有公司的航班信息 获取分页
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @param iPlaneID
	 * @date 创建日期 2020.11.19 修改时间 2021.02.22
	 */
	@Query(value = "select count(*)  from vPlanePlan where iPlaneID=:iPlaneID and (:strPlaneOutZone = \"\" or cZoneOutName like %:strPlaneOutZone%) "
			+ "and (:strPlaneInZone = \"\" or cZoneInName like %:strPlaneInZone%)  ", nativeQuery = true)
	int countALL(@Param("iPlaneID") int iPlaneID, @Param("strPlaneOutZone") String strPlaneOutZone,
			@Param("strPlaneInZone") String strPlaneInZone);

	/**
	 * 后台航班管理中显示自己公司的航班信息 获取分页
	 *
	 * @author 创建人 hanxl 整理 修改人hanxl
	 * @param iOrgID2
	 * @date 创建日期 2020.11.19 修改时间 2021.02.22
	 */
	@Query(value = "select count(*)  from vPlanePlan where iPlaneID=:iPlaneID and (:strPlaneOutZone = \"\" or cZoneOutName like %:strPlaneOutZone%) "
			+ "and (:strPlaneInZone = \"\" or cZoneInName like %:strPlaneInZone%) "
			+ "and cSpare1=:iOrgID", nativeQuery = true)
	int countByOrgID(@Param("iPlaneID") int iPlaneID, @Param("iOrgID") int iOrgID,
			@Param("strPlaneOutZone") String strPlaneOutZone, @Param("strPlaneInZone") String strPlaneInZone);

}
